# -*- mode: org; fill-column: 80; -*-
#+TITLE: Contracts
#+AUTHOR: Zelphir Kaltstahl
#+STARTUP: content indent align inlineimages hideblocks entitiesplain nologdone nologreschedule nologredeadline nologrefile
#+KEYWORDS: contract function
#+TODO: TODO INPROGRESS | DONE CANCELLED
#+DATE: [2022-10-10 Mo]
#+LANGUAGE: en
#+PRIORITIES: A E E
#+OPTIONS: ^:{}
#+OPTIONS: H:10
#+OPTIONS: toc:2
#+OPTIONS: tags:nil
#+OPTIONS: tasks:nil
#+OPTIONS: H:6
#+OPTIONS: p:nil
#+OPTIONS: pri:nil
#+OPTIONS: prop:nil
#+OPTIONS: todo:nil
#+OPTIONS: stat:nil
#+OPTIONS: |:t
#+OPTIONS: inline:nil


* About
:PROPERTIES:
:CUSTOM_ID: about
:END:

This example contains an implementation of a contract system. It uses CK style macros to implement contracts. [fn:: For more information about CK style macros see [[https://okmij.org/ftp/Scheme/macros.html#ck-macros][Oleg Kiselyov's page about them]]]

This is still work in progress.

* TODO Usage
:PROPERTIES:
:CUSTOM_ID: usage
:VISIBILITY: all
:END:

See =test.scm= for usage examples.

* To do [0/1]

** TODO Consider using ~(use-modules (system base ck))~ CK macros

Apparently Guile already has the CK macro stuff built-in. Consider switching to that, instead of defining them in this repository.
